package com.aiwiown.snackmq.broker.filter;

import com.aiwiown.snackmq.common.message.Message;
import lombok.extern.slf4j.Slf4j;

import java.util.Objects;

/**
 * 一个简单的基于 Tag 的消息过滤器引擎。
 * <p>
 * 支持的表达式格式: "tag = 'some_value'"
 * </p>
 */
@Slf4j
public class SimpleTagFilterEngine {

    public boolean evaluate(Message message, String expression) {
        if (expression == null || expression.trim().isEmpty()) {
            return true; // 没有过滤器表达式，默认通过
        }
        if (message == null) {
            return false;
        }

        try {
            // 非常基础的解析: "key = 'value'"
            String[] parts = expression.split("=", 2);
            if (parts.length != 2) {
                log.warn("无效的过滤表达式格式: '{}'。期望格式为 'key = 'value''。", expression);
                return false; // 格式错误的表达式，直接过滤掉
            }

            String key = parts[0].trim();
            String valuePart = parts[1].trim();

            if (!valuePart.startsWith("'") || !valuePart.endsWith("'") || valuePart.length() < 2) {
                log.warn("无效的过滤表达式值格式: '{}'。期望使用单引号包裹。", valuePart);
                return false;
            }
            // 移除单引号
            String expectedValue = valuePart.substring(1, valuePart.length() - 1);

            String actualValue = message.getProperty(key);

            return Objects.equals(expectedValue, actualValue);

        } catch (Exception e) {
            log.error("为消息评估过滤表达式 '{}' 时出错。将过滤掉此消息。", expression, e);
            return false;
        }
    }
}